libotutil: Fix two bugs in usage of posix_fallocate()
authorColin Walters <walters@verbum.org>
Tue, 29 Apr 2014 11:40:25 +0000 (07:40 -0400)
committerColin Walters <walters@verbum.org>
Tue, 29 Apr 2014 11:40:25 +0000 (07:40 -0400)
* It's invalid to call it with a size of 0, so don't do that.

* posix_* apparently don't set errno.  So capture the return value and
  use that.

src/libotutil/ot-gio-utils.c

index 5b3dcfca84e65d921a0e719c36a0bb3cb142f490..61eb422de66171693cb56f15b2aa6bec1ae3f95b 100644 (file)
@@ -308,10 +308,14 @@ ot_gfile_replace_contents_fsync (GFile          *path,
 
   instream = g_memory_input_stream_new_from_bytes (contents);
 
-  if (posix_fallocate (fd, 0, g_bytes_get_size (contents)) != 0)
+  if (g_bytes_get_size (contents) > 0)
     {
-      ot_util_set_error_from_errno (error, errno);
-      goto out;
+      int r = posix_fallocate (fd, 0, g_bytes_get_size (contents));
+      if (r != 0)
+        {
+          ot_util_set_error_from_errno (error, r);
+          goto out;
+        }
     }
 
   if (g_output_stream_splice (stream, instream, 0,